// 给定两个字符串s和t，判断s和t是否使用了相同的字符构成（字符出现的种类和数目都相同）
// 思路，哈希表
// 1. 用map作为哈希表处理
function isAnagram(s, t) {
    if (s === t) return false;
    if (s.length !== t.length) {
        return false
    }
    let map = new Map
    for (const item of s) {
        if (!map.has(item)) {
            map.set(item, 1)
        } else {
            map.set(item, map.get(item) + 1)
        }
    }
    // 再遍历一遍t，减去出现过的字符
    // for (const item of t) {
    //     if (map.has(item)) {
    //         map.set(item, map.get(item) - 1)
    //         if (map.get(item) < 0) {
    //             return false
    //         }
    //     } else {
    //         return false
    //     }
    // }
    for (const item of t) {
        let val = map.get(item)
        if (!val) {
            return false
        }
        map.set(item, val - 1)
    }
    return true
}

let s = "anagram", t = "nagarqm"

console.log(isAnagram(s, t))

// 思路2，数组作为哈希表处理
function isAnagram2(s, t) {
    if (s === t) return false;
    if(s.length !== t.length) {
        return false
    }
    let arr = new Array(26).fill(0)
    let base = 'a'.charCodeAt()
    for (const item of s) {
        arr[item.charCodeAt() - base] += 1
    }
    for (const item of t) {
        // 当判断没有的时候，就可以判断false了
        if (!arr[item.charCodeAt() - base]) {
            return false
        }
        arr[item.charCodeAt() - base] -= 1
    }
    return true
}

let s1 = "anagram", t1 = "nagaram"

console.log(isAnagram2(s1, t1))